home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / cuj1008.zip / RAMEY.ZIP / STKTEST.CC < prev    next >
C/C++ Source or Header  |  1991-06-01  |  2KB  |  102 lines

  1. /* program for testing stack management routines. */
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include "stack.h"
  5.  
  6. char menu[] = "\
  7. 1. init        8. drop\n\
  8. 2. alloc    9. push\n\
  9. 3. free        10. pop\n\
  10. 4. blks        11. end\n\
  11. 5. unused    12. windup\n\
  12. 6. avl        13. set stack address\n\
  13. 7. space\n\
  14. \n\
  15. :";
  16.  
  17. main(){
  18.     /* display options */
  19.  
  20.     STACK *address;
  21.     void *ptr;
  22.     size_t size;
  23.     char c, response[12];
  24.     int i;
  25.     unsigned int j;
  26.  
  27.     address = (STACK *)NULL;
  28.     for(;;){
  29.     printf("current address=%lx\n\n", address);
  30.     printf(menu);
  31.     gets(response);
  32.     switch(i = strtol(response, NULL, 10)){
  33.     default:
  34.         continue;
  35.     case 1:
  36.         printf("type number of segments:");
  37.         gets(response);
  38.         j = strtoul(response, NULL, 10);
  39.         printf("type segment size:");
  40.         gets(response);
  41.         size = (int)strtoul(response, NULL, 10);
  42.         i = stk_init(size, j);
  43.         printf("%d segments created\n", i);
  44.         continue;
  45.     case 2:
  46.         address = stk_alloc();
  47.         continue;
  48.     case 3:
  49.         stk_free(address);
  50.         puts("stack freed");
  51.         continue;
  52.     case 4:
  53.         i = stk_blks(address);
  54.         printf("blks returned=%d\n", i);
  55.         continue;
  56.     case 5:
  57.         i = stk_unused();
  58.         printf("blks unused=%d\n", i);
  59.         continue;
  60.     case 6:
  61.         i = stk_avl(address);
  62.         printf("space available in last block=%d\n",i);
  63.         continue;
  64.     case 7:
  65.         printf("type in number of bytes desired:");
  66.         gets(response);
  67.         size = (int)strtoul(response, NULL, 10);
  68.         ptr = stk_space(address, size);
  69.         printf("ptr=%lx\n", ptr);
  70.         continue;
  71.     case 8:
  72.         stk_drop(address);
  73.         puts("last allocation dropped");
  74.         continue;
  75.     case 9:
  76.         i = stk_push(address);
  77.         printf("frame was %ssuccessfully pushed\n", i ? "" : "un");
  78.         continue;
  79.     case 10:
  80.         i =    stk_pop(address);
  81.         puts(i ? "frame popped" : "nothing to pop");
  82.         continue;
  83.     case 11:
  84.         ptr = stk_end(address);
  85.         printf("end of stack=%lx\n", ptr);
  86.         continue;
  87.     case 12:
  88.         stk_windup();
  89.         puts("stack system closed");
  90.         continue;
  91.     case 13:
  92.         printf("type address of stack to be used:");
  93.         gets(response);
  94.         address = (STACK *)strtoul(response, NULL, 16);
  95.         continue;
  96.     }
  97.     }
  98. }
  99.  
  100.  
  101.  
  102.